package class_object;

public class StaticMembersDemo {
    // 实例属性（每个对象独立）
    private String name;

    // 类属性（静态属性，所有对象共享）
    private static int count = 0;
    private static String className = "StaticMembersDemo";

    public StaticMembersDemo(String name) {
        this.name = name;
        count++; // 每次创建对象，计数器加1
    }

    // 实例方法
    public void showName() {
        System.out.println("姓名：" + name);
        // 实例方法可以访问静态成员
        System.out.println("类名：" + className);
    }

    // 类方法（静态方法）
    public static int getCount() {
        return count;
        // 静态方法不能访问实例成员
        // System.out.println(name); // 错误
    }

    public static String getClassName() {
        return className;
    }

    // 静态代码块：类加载时执行，只执行一次
    static {
        System.out.println("静态代码块执行：" + className + "类被加载");
        className = "StaticDemo"; // 可以修改静态属性
    }

    public static void main(String[] args) {
        // 访问静态成员：直接通过类名访问（推荐）
        System.out.println("类名：" + StaticMembersDemo.getClassName());
        System.out.println("当前对象数量：" + StaticMembersDemo.getCount());

        // 创建对象
        StaticMembersDemo obj1 = new StaticMembersDemo("张三");
        StaticMembersDemo obj2 = new StaticMembersDemo("李四");

        obj1.showName();
        obj2.showName();

        // 也可以通过对象访问静态成员（不推荐）
        System.out.println("当前对象数量：" + obj1.getCount());
        System.out.println("当前对象数量：" + StaticMembersDemo.getCount());
    }
}
